From f7774f5d4a9bf0fcf9dd089273b135a9fec29c0a Mon Sep 17 00:00:00 2001 From: tsteven4 Date: Sat, 14 Jul 2018 09:06:27 -0600 Subject: [PATCH] use reinterpret_cast with queue processing instead of a static cast to a void pointer followed by a static cast to a Waypoint*. --- arcdist.cc | 3 +-- igc.cc | 25 ++++++++++++------------- mapsource.cc | 3 +-- psitrex.cc | 6 ++---- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/arcdist.cc b/arcdist.cc index 91e1688a7..098b69c48 100644 --- a/arcdist.cc +++ b/arcdist.cc @@ -47,8 +47,7 @@ void ArcDistanceFilter::arcdist_arc_disp_wpt_cb(const Waypoint* arcpt2) #else queue* elem, *tmp; QUEUE_FOR_EACH(&waypt_head, elem, tmp) { - void* vwaypointp = static_cast(elem); - Waypoint* waypointp = static_cast(vwaypointp); + Waypoint* waypointp = reinterpret_cast(elem); #endif double dist; extra_data* ed; diff --git a/igc.cc b/igc.cc index c5532acad..a3216935b 100644 --- a/igc.cc +++ b/igc.cc @@ -861,8 +861,6 @@ static void wr_track() { const route_head* pres_track; const route_head* gnss_track; - const queue* elem; - const queue* tmp; int time_adj; // Find pressure altitude and GNSS altitude tracks @@ -883,12 +881,11 @@ static void wr_track() printf(MYNAME ": adjusting time by %ds\n", time_adj); } // Iterate through waypoints in both tracks simultaneously - queue* melem; - queue* mtmp; - QUEUE_FOR_EACH(&gnss_track->waypoint_list, melem, mtmp) { + const queue* elem; + const queue* tmp; + QUEUE_FOR_EACH(&gnss_track->waypoint_list, elem, tmp) { // FIXME(NEW_Q): the excessive casting of the iterators is gross. Rethink. - void* vwaypointp = static_cast(melem); - Waypoint* wpt = static_cast(vwaypointp); + const Waypoint* wpt = reinterpret_cast(elem); double pres_alt = interpolate_alt(pres_track, wpt->GetCreationTime().toTime_t() + time_adj); wr_fix_record(wpt, pres_alt, wpt->altitude); } @@ -896,18 +893,20 @@ static void wr_track() if (pres_track) { // Only the pressure altitude track was found so generate fix // records from it alone. - queue* melem; - queue* mtmp; - QUEUE_FOR_EACH(&pres_track->waypoint_list, melem, mtmp) { - void* vwaypointp = static_cast(melem); - Waypoint* wpt = static_cast(vwaypointp); + const queue* elem; + const queue* tmp; + QUEUE_FOR_EACH(&pres_track->waypoint_list, elem, tmp) { + const Waypoint* wpt = reinterpret_cast(elem); wr_fix_record(wpt, wpt->altitude, unknown_alt); } } else if (gnss_track) { // Only the GNSS altitude track was found so generate fix // records from it alone. + const queue* elem; + const queue* tmp; QUEUE_FOR_EACH(&gnss_track->waypoint_list, elem, tmp) { - wr_fix_record((Waypoint*) elem, (int) unknown_alt, (int)((Waypoint*) elem)->altitude); + const Waypoint* wpt = reinterpret_cast(elem); + wr_fix_record(wpt, unknown_alt, wpt->altitude); } } else { // No tracks found so nothing to do diff --git a/mapsource.cc b/mapsource.cc index 190deb78b..312bebc36 100644 --- a/mapsource.cc +++ b/mapsource.cc @@ -139,8 +139,7 @@ mps_find_wpt_q_by_name(const queue* whichQueue, const QString& name) queue* elem, *tmp; QUEUE_FOR_EACH(whichQueue, elem, tmp) { - void* vwaypointp = static_cast(elem); - Waypoint* waypointp = static_cast(vwaypointp); + Waypoint* waypointp = reinterpret_cast(elem); if (waypointp->shortname == name) { return waypointp; } diff --git a/psitrex.cc b/psitrex.cc index e462073fc..cfb99088a 100644 --- a/psitrex.cc +++ b/psitrex.cc @@ -458,8 +458,7 @@ psit_routehdr_w(gbfile* psit_file, const route_head* rte) unsigned int rte_datapoints = 0; queue *elem, *tmp; QUEUE_FOR_EACH(&rte->waypoint_list, elem, tmp) { - void* vwaypointp = static_cast(elem); - Waypoint* testwpt = static_cast(vwaypointp); + Waypoint* testwpt = reinterpret_cast(elem); if (rte_datapoints == 0) { uniqueValue = testwpt->GetCreationTime().toTime_t(); } @@ -601,8 +600,7 @@ psit_trackhdr_w(gbfile* psit_file, const route_head* trk) unsigned int trk_datapoints = 0; QUEUE_FOR_EACH(&trk->waypoint_list, elem, tmp) { if (trk_datapoints == 0) { - void* vwaypointp = static_cast(elem); - Waypoint* testwpt = static_cast(vwaypointp); + Waypoint* testwpt = reinterpret_cast(elem); uniqueValue = testwpt->GetCreationTime().toTime_t(); } trk_datapoints++; -- 2.30.2